package com.data.service;

import java.util.ArrayList;
import java.util.List;

import javax.transaction.Transactional;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.data.entity.JsonDataitem;
import com.data.entity.JsonItem;
import com.data.entity.JsonItemShow;
import com.entity.Dataitems;
import com.entity.Item;
import com.interfaces.DataitemsDao;
import com.interfaces.ItemDao;
import com.interfaces.MeasuringpointDao;
import com.interfaces.MeterDao;
import com.interfaces.TerminalDao;
import com.utils.JsonResult;

/**
 * @Title: DataitemsService.java
 * @Package com.data.service
 * @author 孙梦楠
 * @date 2017年8月18日 下午1:46:44
 * @version V1.0.0
 */

@Service
public class DataitemsService {

	private static final Logger log = LoggerFactory.getLogger(DataitemsService.class);

	@Autowired
	private DataitemsDao dataitemsdao;

	@Autowired
	private MeasuringpointDao measuringpointdao;

	@Autowired
	private TerminalDao terminaldao;

	@Autowired
	private MeterDao meterdao;

	@Autowired
	private ItemDao itemdao;

	// 列表
	@Transactional
	public JsonResult<List<JsonDataitem>> list_dataitem(Integer meterid) {
		// 判断表是在运行的
		if (meterdao.findOne(meterid).getMeterstatus().equals("3")) {

			// 通过表ID查到表归属的采集终端
			Integer terminalid = measuringpointdao.findByMeterid(meterid).getTerminalid();
			// 通信协议
			String protocoltype = terminaldao.findOne(terminalid).getTerminaltype();

			List<Dataitems> dataitemses = dataitemsdao.findByProtocoltypeAndStatus(protocoltype, "1");

			List<JsonDataitem> datadataitems = new ArrayList<JsonDataitem>();

			for (int i = 0; i < dataitemses.size(); i++) {

				JsonDataitem datadataitem = new JsonDataitem();
				datadataitem.setDataitemid(dataitemses.get(i).getDataitemid());
				datadataitem.setDataitemvalue(dataitemses.get(i).getDataitemvalue());
				// 前端状态码
				datadataitem.setDataitemstatus(0);

				datadataitems.add(datadataitem);
			}
			return new JsonResult<List<JsonDataitem>>(341, "列出该表可进行的抄读操作", datadataitems);
		}
		return new JsonResult<List<JsonDataitem>>(342, "该表尚未运行", null);
	}

	// 列全部结构的表
	public JsonResult<List<JsonDataitem>> list_dataitem_terminal(Integer terminalid) {

		String protocoltype = terminaldao.findOne(terminalid).getTerminaltype();

		List<Dataitems> dataitemses = dataitemsdao.findByProtocoltypeAndStatus(protocoltype, "2");

		List<JsonDataitem> datadataitems = new ArrayList<JsonDataitem>();
		for (int i = 0; i < dataitemses.size(); i++) {

			Dataitems dataitems = dataitemses.get(i);
			JsonDataitem datadataitem = new JsonDataitem();
			datadataitem.setDataitemid(dataitems.getDataitemid());
			datadataitem.setDataitemvalue(dataitems.getDataitemvalue());

			List<Item> items = itemdao.listItemByDateitemid(dataitems.getDataitemid());
			/*-----------------------二层----------------------*/
			List<JsonItem> items2 = new ArrayList<>();
			for (int k = 0; k < items.size(); k++) {
				JsonItem item2 = new JsonItem();
				Item item = items.get(k);
				item2.setItemid(item.getItemid());
				item2.setProtocoltype(item.getProtocoltype());
				item2.setName(item.getName());
				item2.setItemstatus("0");

				String[] s1 = item.getPage().split("-");
			/*-----------------------一层----------------------*/
				List<JsonItemShow> itemShows = new ArrayList<JsonItemShow>();
				for (int j = 0; j < s1.length / 3; j++) {

					JsonItemShow itemShow = new JsonItemShow();
					itemShow.setName(s1[0 + j * 3]);
					itemShow.setType(s1[1 + j * 3]);
					itemShow.setUnit(s1[2 + j * 3]);
					itemShow.setStatus("0");
					itemShows.add(itemShow);
				}
			/*-----------------------一层----------------------*/			
				item2.setItemShows(itemShows);
				
				items2.add(item2);
			}
			/*-----------------------二层----------------------*/			
			datadataitem.setItems(items2);

			datadataitem.setDataitemstatus(0);

			datadataitems.add(datadataitem);
		}
		return new JsonResult<List<JsonDataitem>>(343, "列出该终端可进行的抄读操作", datadataitems);

	}

}
